library(leaflet)
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
###filter the dataset
df =
  data %>%
  filter(data$year >= 2019 & ZIPCODE!="" & DBA != "") %>%
  mutate(GRADE=replace(GRADE, GRADE == "", NA))
Error in `filter()`:
! Problem while computing `..1 = data$year >= 2019 & ZIPCODE != ""
  & DBA != ""`.
Caused by error in `mask$eval_all_filter()`:
! object 'ZIPCODE' not found
Backtrace:
 1. ... %>% mutate(GRADE = replace(GRADE, GRADE == "", NA))
 4. dplyr:::filter.data.frame(., data$year >= 2019 & ZIPCODE != "" & DBA != "")
 5. dplyr:::filter_rows(.data, ..., caller_env = caller_env())
 6. dplyr:::filter_eval(dots, mask = mask, error_call = error_call)
 8. mask$eval_all_filter(dots, env_filter)
spdf_file <- geojson_read("data/zip_code_040114.geojson", what = "sp")
Error: File does not exist. Create it, or fix the path.
##### None Interactive map (Population by region)
ggplot() +
  geom_polygon(data=spdf_data %>%
                 left_join(stats_df, c("id"="ZIPCODE")),
               aes(x=long,
                   y=lat,
                   group=group,
                   fill=POPULATION),
               color="white",
               size=.2) +
  theme_void() +
  coord_map() +
  scale_fill_distiller(palette = "YlGnBu", direction = 1) +
  labs(title="Population in New York City",
       subtitle="Neighborhoods are filled by population",
       fill="Population")
ℹ The package `mapproj` is required for `coord_map()`
✖ Would you like to install it?

1: Yes
2: No
1
trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/maps_3.4.0.tgz'
Content type 'application/x-gzip' length 3105764 bytes (3.0 MB)
==================================================
downloaded 3.0 MB

trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/mapproj_1.2.8.tgz'
Content type 'application/x-gzip' length 83346 bytes (81 KB)
==================================================
downloaded 81 KB

The downloaded binary packages are in
    /var/folders/8g/h01d0z5d7pd4tl0y6y3d_7j80000gn/T//RtmpQXKOME/downloaded_packages

leaflet()%>%
  addProviderTiles("CartoDB")%>%
  #### First Layer of PolyGons
  addPolygons(
    data = spdf_file_2022 ,
    weight = 0.5,
    color = "black",
    stroke=TRUE ,
    opacity = 1 ,
    fillColor = ~nc_pal(Total),
    label = ~paste0 ('Total Critical Violation : ' , Total),
    group = '2022',
    highlight = highlightOptions(weight  = 3, color = "red", bringToFront =  T)
    ) %>%
  
  #### Second Layer of PolyGons
    addPolygons(
    data = spdf_file_2021 ,
    weight = 0.5,
    color = "black",
    stroke=TRUE ,
    opacity = 1 ,
    fillColor = ~nc_pal(Total),
    
    label =~paste0 ('Total Critical Violation : ' , Total),
    group = '2021',
    highlight = highlightOptions(weight  = 3, color = "red", bringToFront =  T)
    ) %>%
    addLayersControl(overlayGroups = c("2022", "2021"))%>%
  
  
  
    addLegend( pal=nc_pal, values= spdf_file_2022$Total, opacity=0.9, title = "Critical", position = "bottomleft" )
Warning: Some values were outside the color scale and will be treated as NAWarning: Some values were outside the color scale and will be treated as NA
leaflet()%>%
  addProviderTiles("CartoDB")%>%
  #### First Layer of PolyGons
  addPolygons(
    data = spdf_file_2022 ,
    weight = 0.5,
    color = "black",
    stroke=TRUE ,
    opacity = 1 ,
    fillColor = ~nc_pal(Total),
    label = ~paste0 ('Total Critical Violation : ' , Total),
    group = '2022',
    highlight = highlightOptions(weight  = 3, color = "red", bringToFront =  T)
    ) %>%
  
  #### Second Layer of PolyGons
    addPolygons(
    data = spdf_file_2021 ,
    weight = 0.5,
    color = "black",
    stroke=TRUE ,
    opacity = 1 ,
    fillColor = ~nc_pal(Total),
    label =~paste0 ('Total  Violation : ' , Total),
    group = '2021',
    highlight = highlightOptions(weight  = 3, color = "red", bringToFront =  T)
    ) %>%
    addLayersControl(overlayGroups = c("2022", "2021"))%>%
  
  #####Third layer
    addPolygons(
    data = spdf_file_2020 ,
    weight = 0.5,
    color = "black",
    stroke=TRUE ,
    opacity = 1 ,
    fillColor = ~nc_pal(Total),
    
    label =~paste0 ('Total  Violation : ' , Total),
    group = '2020',
    highlight = highlightOptions(weight  = 3, color = "red", bringToFront =  T)
    ) %>%
  
  ####Fourth
    addPolygons(
    data = spdf_file_2019 ,
    weight = 0.5,
    color = "black",
    stroke=TRUE ,
    opacity = 1 ,
    fillColor = ~nc_pal(Total),
    label =~paste0 ('Total  Violation : ' , Total),
    group = '2019',
    highlight = highlightOptions(weight  = 3, color = "red", bringToFront =  T)
    ) %>%
   
  
    addLayersControl(overlayGroups = c("2022", "2021",'2020', '2019'))%>%
    addLegend( pal=nc_pal, values= spdf_file_2022$Total, opacity=0.9, title = "Count of Total Violation", position = "bottomleft" )
Warning: Some values were outside the color scale and will be treated as NAWarning: Some values were outside the color scale and will be treated as NA
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2VvanNvbmlvKQpsaWJyYXJ5KGJyb29tKQpsaWJyYXJ5KHNmKQpsaWJyYXJ5KG9zbWRhdGEpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ25ld3NjYWxlKQpsaWJyYXJ5KFJTb2NyYXRhKQpsaWJyYXJ5KHJzdHVkaW9hcGkpCmxpYnJhcnkobGVhZmxldCkKI3NldCB3b3JraW5nIGRpcmVjdG9yeQpjdXJyZW50X3BhdGggPC0gcnN0dWRpb2FwaTo6Z2V0QWN0aXZlRG9jdW1lbnRDb250ZXh0KCkkcGF0aApzZXR3ZChkaXJuYW1lKGN1cnJlbnRfcGF0aCkpCmdldHdkKCkKYGBgCgoKYGBge3J9CiMjIyMgTG9hZCB0aGUgUmVzdGF1cmFudCBkYXRhc2V0CmRhdGEgPSAgcmVhZC5zb2NyYXRhKAogICJodHRwczovL2RhdGEuY2l0eW9mbmV3eW9yay51cy9yZXNvdXJjZS80M25uLXBuOGouanNvbiIsCiAgYXBwX3Rva2VuID0gInpUUmVocDE4OTdTUXRwWXRCaUlPVU1mUjQiCikKCmRhdGEkeWVhciA8LSBmb3JtYXQoZGF0YSRpbnNwZWN0aW9uX2RhdGUsIiVZIikgIyMgRXh0cmFjdCBZZWFycwoKIyMjZmlsdGVyIHRoZSBkYXRhc2V0CmRmID0KICBkYXRhICU+JQogIGZpbHRlcihkYXRhJHllYXIgPj0gMjAxOSAmIHppcGNvZGUhPSIiICYgZGJhICE9ICIiKSAlPiUKICBtdXRhdGUoZ3JhZGU9cmVwbGFjZShncmFkZSwgZ3JhZGUgPT0gIiIsIE5BKSkKCmhlYWQoZGYpCmBgYAoKCmBgYHtyfQojIFJlYWQgdGhlIGdlb2pzb24gZmlsZSBjb250YWluaW5nIFNwYXRpYWwgSW5mbwpzcGRmX2ZpbGUgPC0gZ2VvanNvbl9yZWFkKCIuLi9kYXRhL3ppcF9jb2RlXzA0MDExNC5nZW9qc29uIiwgd2hhdCA9ICJzcCIpCgpzdGF0c19kZiA9IHNwZGZfZmlsZUBkYXRhCgojIENvbnZlcnQgaXQgdG8gYSBzcGF0aWFsIGRhdGEgZnJhbWUsIHdpdGggemlwIGNvZGUgYXMgaW5kZXgKc3BkZl9kYXRhIDwtIHRpZHkoICBzcGRmX2ZpbGUsCiAgcmVnaW9uPSJaSVBDT0RFIiAgIyBVc2UgWklQQ09ERSB2YXJpYWJsZSBhcyBpbmRleCwgdGhlIGluZGV4IHdpbGwgYmUgbmFtZWQgImlkIgopCmBgYAoKCgoKYGBge3J9CgojIyMjIyBOb25lIEludGVyYWN0aXZlIG1hcCAoUG9wdWxhdGlvbiBieSByZWdpb24pCmdncGxvdCgpICsKICBnZW9tX3BvbHlnb24oZGF0YT1zcGRmX2RhdGEgJT4lCiAgICAgICAgICAgICAgICAgbGVmdF9qb2luKHN0YXRzX2RmLCBjKCJpZCI9IlpJUENPREUiKSksCiAgICAgICAgICAgICAgIGFlcyh4PWxvbmcsCiAgICAgICAgICAgICAgICAgICB5PWxhdCwKICAgICAgICAgICAgICAgICAgIGdyb3VwPWdyb3VwLAogICAgICAgICAgICAgICAgICAgZmlsbD1QT1BVTEFUSU9OKSwKICAgICAgICAgICAgICAgY29sb3I9IndoaXRlIiwKICAgICAgICAgICAgICAgc2l6ZT0uMikgKwogIHRoZW1lX3ZvaWQoKSArCiAgY29vcmRfbWFwKCkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiWWxHbkJ1IiwgZGlyZWN0aW9uID0gMSkgKwogIGxhYnModGl0bGU9IlBvcHVsYXRpb24gaW4gTmV3IFlvcmsgQ2l0eSIsCiAgICAgICBzdWJ0aXRsZT0iTmVpZ2hib3Job29kcyBhcmUgZmlsbGVkIGJ5IHBvcHVsYXRpb24iLAogICAgICAgZmlsbD0iUG9wdWxhdGlvbiIpCmBgYAoKCgpgYGB7cn0KCiMjIyMgTnVtYmVyIG9mIHJlc3RhdXJhbnQgcGVyIFpJUENPREUKTnVtX1Jlc3RfQ29kZSA9CiAgZGYlPiUKICBncm91cF9ieSh6aXBjb2RlLCBkYmEsIGxhdGl0dWRlLCBsb25naXR1ZGUpJT4lCiAgY291bnQoKSAlPiUKICBncm91cF9ieSh6aXBjb2RlKSU+JQogIGNvdW50KCkKCkNyaXRpY2FsXzIwMTlfYnlfQ29kZSA9IAogIGRmJT4lCiAgZmlsdGVyKHllYXIgPT0gMjAxOSklPiUKICBncm91cF9ieSh6aXBjb2RlKSU+JQogIHN1bW1hcml6ZShUb3RhbCA9IG4oKSkKICAKQ3JpdGljYWxfMjAyMF9ieV9Db2RlID0gCiAgZGYlPiUKICBmaWx0ZXIoeWVhciA9PSAyMDIwKSU+JQogIGdyb3VwX2J5KHppcGNvZGUpJT4lCiAgc3VtbWFyaXplKFRvdGFsID0gbigpKQogIApDcml0aWNhbF8yMDIxX2J5X0NvZGUgPSAKICBkZiU+JQogIGZpbHRlcih5ZWFyID09IDIwMjEpJT4lCiAgZ3JvdXBfYnkoemlwY29kZSklPiUKICBzdW1tYXJpemUoVG90YWwgPSBuKCkpCiAgCkNyaXRpY2FsXzIwMjJfYnlfQ29kZSA9IAogIGRmJT4lCiAgZmlsdGVyKHllYXIgPT0gMjAyMiklPiUKICBncm91cF9ieSh6aXBjb2RlKSU+JQogIHN1bW1hcml6ZShUb3RhbCA9IG4oKSkKCgpzcGRmX2ZpbGVfMjAyMiA9IHNwZGZfZmlsZQpzcGRmX2ZpbGVfMjAyMkBkYXRhID0Kc3BkZl9maWxlXzIwMjJAZGF0YSAlPiUKICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oQ3JpdGljYWxfMjAyMl9ieV9Db2RlLCBjKCJaSVBDT0RFIj0iemlwY29kZSIpKQoKCgpzcGRmX2ZpbGVfMjAxOSA9IHNwZGZfZmlsZQpzcGRmX2ZpbGVfMjAxOUBkYXRhID0Kc3BkZl9maWxlXzIwMTlAZGF0YSAlPiUKICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oQ3JpdGljYWxfMjAxOV9ieV9Db2RlLCBjKCJaSVBDT0RFIj0iemlwY29kZSIpKQoKCnNwZGZfZmlsZV8yMDIwID0gc3BkZl9maWxlCnNwZGZfZmlsZV8yMDIwQGRhdGEgPQpzcGRmX2ZpbGVfMjAyMEBkYXRhICU+JQogICAgICAgICAgICAgICAgIGxlZnRfam9pbihDcml0aWNhbF8yMDIwX2J5X0NvZGUsIGMoIlpJUENPREUiPSJ6aXBjb2RlIikpCgpzcGRmX2ZpbGVfMjAyMSA9IHNwZGZfZmlsZQpzcGRmX2ZpbGVfMjAyMUBkYXRhID0Kc3BkZl9maWxlXzIwMjFAZGF0YSAlPiUKICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oQ3JpdGljYWxfMjAyMV9ieV9Db2RlLCBjKCJaSVBDT0RFIj0iemlwY29kZSIpKQoKCgoKCgoKbmNfcGFsPSBjb2xvck51bWVyaWMocGFsZXR0ZT0iWWxPckJyIiwgZG9tYWluPSBzcGRmX2ZpbGVfMjAxOUBkYXRhJFRvdGFsLCBuYS5jb2xvciA9ICd0cmFuc3BhcmVudCcpCgoKCmxlYWZsZXQoKSU+JQogIGFkZFByb3ZpZGVyVGlsZXMoIkNhcnRvREIiKSU+JQogICMjIyMgRmlyc3QgTGF5ZXIgb2YgUG9seUdvbnMKICBhZGRQb2x5Z29ucygKICAgIGRhdGEgPSBzcGRmX2ZpbGVfMjAyMiAsCiAgICB3ZWlnaHQgPSAwLjUsCiAgICBjb2xvciA9ICJibGFjayIsCiAgICBzdHJva2U9VFJVRSAsCiAgICBvcGFjaXR5ID0gMSAsCiAgICBmaWxsQ29sb3IgPSB+bmNfcGFsKFRvdGFsKSwKICAgIGxhYmVsID0gfnBhc3RlMCAoJ1RvdGFsIENyaXRpY2FsIFZpb2xhdGlvbiA6ICcgLCBUb3RhbCksCiAgICBncm91cCA9ICcyMDIyJywKICAgIGhpZ2hsaWdodCA9IGhpZ2hsaWdodE9wdGlvbnMod2VpZ2h0ICA9IDMsIGNvbG9yID0gInJlZCIsIGJyaW5nVG9Gcm9udCA9ICBUKQogICAgKSAlPiUKICAKICAjIyMjIFNlY29uZCBMYXllciBvZiBQb2x5R29ucwogICAgYWRkUG9seWdvbnMoCiAgICBkYXRhID0gc3BkZl9maWxlXzIwMjEgLAogICAgd2VpZ2h0ID0gMC41LAogICAgY29sb3IgPSAiYmxhY2siLAogICAgc3Ryb2tlPVRSVUUgLAogICAgb3BhY2l0eSA9IDEgLAogICAgZmlsbENvbG9yID0gfm5jX3BhbChUb3RhbCksCiAgICAKICAgIGxhYmVsID1+cGFzdGUwICgnVG90YWwgQ3JpdGljYWwgVmlvbGF0aW9uIDogJyAsIFRvdGFsKSwKICAgIGdyb3VwID0gJzIwMjEnLAogICAgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0T3B0aW9ucyh3ZWlnaHQgID0gMywgY29sb3IgPSAicmVkIiwgYnJpbmdUb0Zyb250ID0gIFQpCiAgICApICU+JQogICAgYWRkTGF5ZXJzQ29udHJvbChvdmVybGF5R3JvdXBzID0gYygiMjAyMiIsICIyMDIxIikpJT4lCiAgCiAgCiAgCiAgICBhZGRMZWdlbmQoIHBhbD1uY19wYWwsIHZhbHVlcz0gc3BkZl9maWxlXzIwMjIkVG90YWwsIG9wYWNpdHk9MC45LCB0aXRsZSA9ICJDcml0aWNhbCIsIHBvc2l0aW9uID0gImJvdHRvbWxlZnQiICkKICAgIApgYGAKCgoKYGBge3J9CgoKClRvdGFsX3Zpb2xhdGlvbiA9IAogIGRmJT4lCiAgZ3JvdXBfYnkoemlwY29kZSklPiUKICBzdW1tYXJpemUoVG90YWwgPSBuKCkpCgoKVG90YWxfMjAxOV9ieV9Db2RlID0gCiAgZGYlPiUKICBmaWx0ZXIoeWVhciA9PSAyMDE5KSU+JQogIGdyb3VwX2J5KHppcGNvZGUpJT4lCiAgc3VtbWFyaXplKFRvdGFsID0gbigpKQogIApUb3RhbF8yMDIwX2J5X0NvZGUgPSAKICBkZiU+JQogIGZpbHRlcih5ZWFyID09IDIwMjApJT4lCiAgZ3JvdXBfYnkoemlwY29kZSklPiUKICBzdW1tYXJpemUoVG90YWwgPSBuKCkpCiAgClRvdGFsXzIwMjFfYnlfQ29kZSA9IAogIGRmJT4lCiAgZmlsdGVyKHllYXIgPT0gMjAyMSklPiUKICBncm91cF9ieSh6aXBjb2RlKSU+JQogIHN1bW1hcml6ZShUb3RhbCA9IG4oKSkKICAKVG90YWxfMjAyMl9ieV9Db2RlID0gCiAgZGYlPiUKICBmaWx0ZXIoeWVhciA9PSAyMDIyKSU+JQogIGdyb3VwX2J5KHppcGNvZGUpJT4lCiAgc3VtbWFyaXplKFRvdGFsID0gbigpKQoKCgoKCiMjIyMjIEpvaW4gZGF0YXNldHMKc3BkZl9maWxlXzIwMjIgPSBzcGRmX2ZpbGUKc3BkZl9maWxlXzIwMjJAZGF0YSA9CnNwZGZfZmlsZV8yMDIyQGRhdGEgJT4lCiAgICAgICAgICAgICAgICAgbGVmdF9qb2luKFRvdGFsXzIwMjJfYnlfQ29kZSwgYygiWklQQ09ERSI9InppcGNvZGUiKSkKCgoKc3BkZl9maWxlXzIwMTkgPSBzcGRmX2ZpbGUKc3BkZl9maWxlXzIwMTlAZGF0YSA9CnNwZGZfZmlsZV8yMDE5QGRhdGEgJT4lCiAgICAgICAgICAgICAgICAgbGVmdF9qb2luKFRvdGFsXzIwMTlfYnlfQ29kZSwgYygiWklQQ09ERSI9InppcGNvZGUiKSkKCgpzcGRmX2ZpbGVfMjAyMCA9IHNwZGZfZmlsZQpzcGRmX2ZpbGVfMjAyMEBkYXRhID0Kc3BkZl9maWxlXzIwMjBAZGF0YSAlPiUKICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oVG90YWxfMjAyMF9ieV9Db2RlLCBjKCJaSVBDT0RFIj0iemlwY29kZSIpKQoKc3BkZl9maWxlXzIwMjEgPSBzcGRmX2ZpbGUKc3BkZl9maWxlXzIwMjFAZGF0YSA9CnNwZGZfZmlsZV8yMDIxQGRhdGEgJT4lCiAgICAgICAgICAgICAgICAgbGVmdF9qb2luKFRvdGFsXzIwMjFfYnlfQ29kZSwgYygiWklQQ09ERSI9InppcGNvZGUiKSkKCgoKCgoKIyMjIyMgY29sb3JzCm5jX3BhbD0gY29sb3JOdW1lcmljKHBhbGV0dGU9IllsT3JCciIsIGRvbWFpbj0gc3BkZl9maWxlXzIwMTlAZGF0YSRUb3RhbCwgbmEuY29sb3IgPSAndHJhbnNwYXJlbnQnKQoKCmxlYWZsZXQoKSU+JQogIGFkZFByb3ZpZGVyVGlsZXMoIkNhcnRvREIiKSU+JQogICMjIyMgRmlyc3QgTGF5ZXIgb2YgUG9seUdvbnMKICBhZGRQb2x5Z29ucygKICAgIGRhdGEgPSBzcGRmX2ZpbGVfMjAyMiAsCiAgICB3ZWlnaHQgPSAwLjUsCiAgICBjb2xvciA9ICJibGFjayIsCiAgICBzdHJva2U9VFJVRSAsCiAgICBvcGFjaXR5ID0gMSAsCiAgICBmaWxsQ29sb3IgPSB+bmNfcGFsKFRvdGFsKSwKICAgIGxhYmVsID0gfnBhc3RlMCAoJ1RvdGFsIENyaXRpY2FsIFZpb2xhdGlvbiA6ICcgLCBUb3RhbCksCiAgICBncm91cCA9ICcyMDIyJywKICAgIGhpZ2hsaWdodCA9IGhpZ2hsaWdodE9wdGlvbnMod2VpZ2h0ICA9IDMsIGNvbG9yID0gInJlZCIsIGJyaW5nVG9Gcm9udCA9ICBUKQogICAgKSAlPiUKICAKICAjIyMjIFNlY29uZCBMYXllciBvZiBQb2x5R29ucwogICAgYWRkUG9seWdvbnMoCiAgICBkYXRhID0gc3BkZl9maWxlXzIwMjEgLAogICAgd2VpZ2h0ID0gMC41LAogICAgY29sb3IgPSAiYmxhY2siLAogICAgc3Ryb2tlPVRSVUUgLAogICAgb3BhY2l0eSA9IDEgLAogICAgZmlsbENvbG9yID0gfm5jX3BhbChUb3RhbCksCiAgICBsYWJlbCA9fnBhc3RlMCAoJ1RvdGFsICBWaW9sYXRpb24gOiAnICwgVG90YWwpLAogICAgZ3JvdXAgPSAnMjAyMScsCiAgICBoaWdobGlnaHQgPSBoaWdobGlnaHRPcHRpb25zKHdlaWdodCAgPSAzLCBjb2xvciA9ICJyZWQiLCBicmluZ1RvRnJvbnQgPSAgVCkKICAgICkgJT4lCiAgICBhZGRMYXllcnNDb250cm9sKG92ZXJsYXlHcm91cHMgPSBjKCIyMDIyIiwgIjIwMjEiKSklPiUKICAKICAjIyMjI1RoaXJkIGxheWVyCiAgICBhZGRQb2x5Z29ucygKICAgIGRhdGEgPSBzcGRmX2ZpbGVfMjAyMCAsCiAgICB3ZWlnaHQgPSAwLjUsCiAgICBjb2xvciA9ICJibGFjayIsCiAgICBzdHJva2U9VFJVRSAsCiAgICBvcGFjaXR5ID0gMSAsCiAgICBmaWxsQ29sb3IgPSB+bmNfcGFsKFRvdGFsKSwKICAgIAogICAgbGFiZWwgPX5wYXN0ZTAgKCdUb3RhbCAgVmlvbGF0aW9uIDogJyAsIFRvdGFsKSwKICAgIGdyb3VwID0gJzIwMjAnLAogICAgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0T3B0aW9ucyh3ZWlnaHQgID0gMywgY29sb3IgPSAicmVkIiwgYnJpbmdUb0Zyb250ID0gIFQpCiAgICApICU+JQogIAogICMjIyNGb3VydGgKICAgIGFkZFBvbHlnb25zKAogICAgZGF0YSA9IHNwZGZfZmlsZV8yMDE5ICwKICAgIHdlaWdodCA9IDAuNSwKICAgIGNvbG9yID0gImJsYWNrIiwKICAgIHN0cm9rZT1UUlVFICwKICAgIG9wYWNpdHkgPSAxICwKICAgIGZpbGxDb2xvciA9IH5uY19wYWwoVG90YWwpLAogICAgbGFiZWwgPX5wYXN0ZTAgKCdUb3RhbCAgVmlvbGF0aW9uIDogJyAsIFRvdGFsKSwKICAgIGdyb3VwID0gJzIwMTknLAogICAgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0T3B0aW9ucyh3ZWlnaHQgID0gMywgY29sb3IgPSAicmVkIiwgYnJpbmdUb0Zyb250ID0gIFQpCiAgICApICU+JQogICAKICAKICAgIGFkZExheWVyc0NvbnRyb2wob3ZlcmxheUdyb3VwcyA9IGMoIjIwMjIiLCAiMjAyMSIsJzIwMjAnLCAnMjAxOScpKSU+JQogICAgYWRkTGVnZW5kKCBwYWw9bmNfcGFsLCB2YWx1ZXM9IHNwZGZfZmlsZV8yMDIyJFRvdGFsLCBvcGFjaXR5PTAuOSwgdGl0bGUgPSAiQ291bnQgb2YgVG90YWwgVmlvbGF0aW9uIiwgcG9zaXRpb24gPSAiYm90dG9tbGVmdCIgKQoKCiAgCgpgYGAKCgoK